Cteni zaznamu z .LNK

Otázka od: Pavel !

20. 9. 2004 18:58

Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.

Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
Delphi. Jinak vyhodi hlasku "Access violation at XXXX read of adress
YYYY "
ale cestu lze zobrazit . Procedura najde osetrit ani TRY EXCEPT.
Protoze vyjimka vznika asi v jinem prog.

Co s tim ? Kde je chyba

uses ActiveX, Comobj, ShlObj;

procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
TWin32FindData);
var
  MyObject : IUnknown;
  MySLink : IShellLink;
  MyPFile : IPersistFile;

  PFileName : PChar;
  hres : HRESULT;
  pfd: TWin32FindData;

begin
  MyObject := CreateComObject(CLSID_ShellLink);
  MySLink := MyObject as IShellLink;
  MyPFile := MyObject as IPersistFile;

  if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
   messagebox(hnd,'Chyba !!','',mb_ok);

  MySLink.Resolve(hnd,SLR_ANY_MATCH);
  if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);

  hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
  if SUCCEEDED(hres) then begin res := PFD;

end;


diky

Odpovedá: Slavomir Skopalik

20. 9. 2004 19:20

Nevim kde je chyba, ale co takle to zkusit krokovat ?

 Slavek

> Tento algoritmus funguje sprane jenom na zastupce vytvorene
> pomoci Delphi. Jinak vyhodi hlasku
"Access violation at XXXX
> read of adress YYYY " ale cestu lze zobrazit .
Procedura
> najde osetrit ani TRY EXCEPT. Protoze vyjimka vznika asi v
> jinem prog.
>


Odpovedá: Jiri Cincura

20. 9. 2004 19:36

Pavel ! wrote:
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
>
> Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
> Delphi. Jinak vyhodi hlasku
"Access violation at XXXX read of adress YYYY
> " ale cestu lze zobrazit .
Procedura najde osetrit ani TRY EXCEPT.
> Protoze vyjimka vznika asi v jinem prog.
>
> Co s tim ? Kde je chyba
>
> uses ActiveX, Comobj, ShlObj;
>
> procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
> TWin32FindData);
> var
> MyObject : IUnknown;
> MySLink : IShellLink;
> MyPFile : IPersistFile;
>
> PFileName : PChar;
> hres : HRESULT;
> pfd: TWin32FindData;
>
> begin
> MyObject := CreateComObject(CLSID_ShellLink);
> MySLink := MyObject as IShellLink;
> MyPFile := MyObject as IPersistFile;
>
> if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
> messagebox(hnd,'Chyba !!','',mb_ok);
>
> MySLink.Resolve(hnd,SLR_ANY_MATCH);
> if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);
>
> hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
> if SUCCEEDED(hres) then begin res := PFD;
>
> end;
>
>
> diky

Pokud to obalis cele try .. except, tak by to melo jit, ne? Pak bych zkusil
krokovat, nebo posouvat except "nahoru".

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net


Odpovedá: Petr Vones

21. 9. 2004 11:26

From: "Pavel !" <paullb@seznam.cz>
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.

Pouzij uz hotovou funkci ShellLinkResolve (unit JclShell) z JCL:
http://sourceforge.net/projects/jcl

Petr Vones



Odpovedá: Pavel !

21. 9. 2004 19:31

Kdyz se dame hned po "begin" try a nad konecne "end" except, tak me to
take vyhodi chybu (pokud otevru jiny soubor nez vytvoreny necim jinym).
Kdyz se pokusm o krokovani tak me to chybu nenaznaci, ale jak se
dokrokuju az na konecne END tak me to vyhodi chybu. Ale zjistil jsem ze
pokud hodim komentar
pred :
// hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;

tak to chybu nehodi, ale co me to je platne, kdyz potrebuji vystup z
ukazatele PFileName !

Ale dost mozna ze je to chyba v mojim OS. Vam tento muj algoritmus
funguje uspesne ?


Pavel

----- Orig.

Pokud to obalis cele try .. except, tak by to melo jit, ne? Pak bych
zkusil
krokovat, nebo posouvat except "nahoru".
 
Pavel ! wrote:
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak
vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
>
> Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
> Delphi. Jinak vyhodi hlasku
"Access violation at XXXX read of adress
YYYY
> " ale cestu lze zobrazit .
Procedura najde osetrit ani TRY EXCEPT.
> Protoze vyjimka vznika asi v jinem prog.
>
> Co s tim ? Kde je chyba
>
> uses ActiveX, Comobj, ShlObj;
>
> procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
> TWin32FindData);
> var
> MyObject : IUnknown;
> MySLink : IShellLink;
> MyPFile : IPersistFile;
>
> PFileName : PChar;
> hres : HRESULT;
> pfd: TWin32FindData;
>
> begin
> MyObject := CreateComObject(CLSID_ShellLink);
> MySLink := MyObject as IShellLink;
> MyPFile := MyObject as IPersistFile;
>
> if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
> messagebox(hnd,'Chyba !!','',mb_ok);
>
> MySLink.Resolve(hnd,SLR_ANY_MATCH);
> if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);
>
> hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
> if SUCCEEDED(hres) then begin res := PFD;
>
> end;
>
>
> diky